<?php
/**
 * application_top.php 每个页面调用时执行的通用动作
 * 
 * 初始化通用类以及方法. Controlled by an array which describes 
 * the elements to be initialised and the order in which that happens.
 * see {@link  http://www.zen-cart.com/wiki/index.php/Developers_API_Tutorials#InitSystem wikitutorials} for more details.
 *
 * @package initSystem
 * @copyright Copyright 2003-2007 Zen Cart Development Team
 * @copyright Portions Copyright 2003 osCommerce
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: application_top.php 7470 2007-11-24 20:54:50Z drbyte $
 */
/*
 * 关闭魔术引用(runtime和sybase都需要关闭，打开其中任何一个都会引起问题)
 */
set_magic_quotes_runtime(0);
if (@ini_get('magic_quotes_sybase') != 0) @ini_set('magic_quotes_sybase', 0);
/**
 * 如果为真那么自动加载器脚本将会被解析。仅用于调试用途。
 */
define('DEBUG_AUTOLOAD', false);
/**
 * 用来查看是否处于管理脚本，显然这里要设定为假。
 */
define('IS_ADMIN_FLAG', false);
/**
 * 记录脚本开始运行时的时间，整数。
 */
define('PAGE_PARSE_START_TIME', microtime());
//  define('DISPLAY_PAGE_PARSE_TIME', 'true');
@ini_set("arg_separator.output","&");
/**
 * 设定本地配置参数 - 主要为了开发人员
 */
if (file_exists('includes/local/configure.php')) {
  /**
   * 加载(用户创建的)本地配置文件
   */
  include('includes/local/configure.php');
}
/**
 * 设定错误报告级别
 * 
 * 记住在生产环境中，STRICT_ERROR_REPORTING永远不要设置为真<br />
 * 它在这里主要用来显示错误，方便调试修改程序<br />
 * note for strict error reporting we also turn on show_errors as this may be disabled<br />
 * in php.ini. Otherwise we respect the php.ini setting 
 * 
 */
if (defined('STRICT_ERROR_REPORTING') && STRICT_ERROR_REPORTING == true) {
  @ini_set('display_errors', '1');
  error_reporting(E_ALL);
} else {
  error_reporting(0);
}
/**
 * 检查并加载应用程序参数
 */
if (file_exists('includes/configure.php')) {
  /**
   * 加载主配置文件
   */
  include('includes/configure.php');
} else {
  require('includes/templates/template_default/templates/tpl_zc_install_suggested_default.php'); // 主配置文件不存在，显示帮助页面，提示执行安装脚本
  exit;
}
/**
 * 如果配置文件不合法 (例如: 是假造的或结构不正确, 显示帮助页面，提示执行安装脚本)
 */
if (!defined('DIR_FS_CATALOG') || !is_dir(DIR_FS_CATALOG.'/includes/classes')) {
  require('includes/templates/template_default/templates/tpl_zc_install_suggested_default.php');
  exit;
}
/**
 * 加载扩展配置文件列表
 */
if ($za_dir = @dir(DIR_WS_INCLUDES . 'extra_configures')) { // 使用dir类读取扩展配置目录
  while ($zv_file = $za_dir->read()) {
    if (preg_match('/\.php$/', $zv_file) > 0) { // 如果读取的是php文件
      /**
       * 加载任何用户的具体配置文件。
       */
      include(DIR_WS_INCLUDES . 'extra_configures/' . $zv_file);
    }
  }
  $za_dir->close(); // 关闭目录
}
$autoLoadConfig = array();  // 初始化一个数组
if (isset($loaderPrefix)) { // 处理前缀
 $loaderPrefix = preg_replace('/[a-z_]^/', '', $loaderPrefix); 
} else {
  $loaderPrefix = 'config';
}
$loader_file = $loaderPrefix . '.core.php'; // 构造文件名
require('includes/initsystem.php'); // 加载系统启动文件
/**
 * 确定安装状态，安装如果不正确，显示帮助页面，提示执行安装脚本
 */
if (( (!file_exists('includes/configure.php') && !file_exists('includes/local/configure.php')) ) || (DB_TYPE == '') || (!file_exists('includes/classes/db/' .DB_TYPE . '/query_factory.php')) || !file_exists('includes/autoload_func.php')) {
  require('includes/templates/template_default/templates/tpl_zc_install_suggested_default.php');
  header('location: zc_install/index.php');
  exit;
}
/**
 * 加载自动解释器代码
*/
require('includes/autoload_func.php');
/**
 * 加载计数器代码
**/
// 计数器和计数器历史
  require(DIR_WS_INCLUDES . 'counter.php');

// 获取PayPal无法获取的客户IP
$customers_ip_address = $_SERVER['REMOTE_ADDR'];
if (!isset($_SESSION['customers_ip_address'])) {
  $_SESSION['customers_ip_address'] = $customers_ip_address; // 将客户端地址保存到SESSION
}
?>